<!doctype html>
<html lang="zh-CN">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="referrer" content="no-referrer-when-downgrade">
    

    <title>《Nginx学习笔记》 | 早起的年轻人</title>
    <meta property="og:title" content="《Nginx学习笔记》 - 早起的年轻人">
    <meta property="og:type" content="article">
        
    <meta property="article:published_time" content='2021-03-17T07:18:09&#43;08:00'>
        
        
    <meta property="article:modified_time" content='2021-03-17T07:18:09&#43;08:00'>
        
    <meta name="Keywords" content="Flutter，golang,go语言,go语言笔记,飞雪无情,java,android,博客,项目管理,python,软件架构,公众号,小程序">
    <meta name="description" content="《Nginx学习笔记》">
        
    <meta name="author" content="luckly">
    <meta property="og:url" content="https://luckly.work/post/nginx/Nginx%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">
    <link rel="shortcut icon" href='/favicon.ico'  type="image/x-icon">

    <link rel="stylesheet" href='/css/normalize.css'>
    <link rel="stylesheet" href='/css/style.css'>
    <script type="text/javascript" src="//cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    
    
    
        <link href="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" rel="stylesheet">
    
    
    
    
        <link rel="stylesheet" href='/css/douban.css'>
    
        <link rel="stylesheet" href='/css/other.css'>
    
</head>

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/highlight.min.js"></script>
<body>
    <header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <div class="site-name ">
                
                    <a id="logo" href="https://luckly.work/">
                        早起的年轻人
                    </a>
                
                <p class="description">专注于Flutter、Android、Java、Go语言(golang)、移动互联网、项目管理、软件架构</p>
            </div>
            <div>
                <nav id="nav-menu" class="clearfix">
                    <a class="current" href="https://luckly.work/">首页</a>
                    
                    <a  href="https://luckly.work/categories/" title="分类">分类</a>
                    
                    <a  href="https://luckly.work/tags/" title="标签">标签</a>
                    
                    <a  href="https://luckly.work/archives/" title="归档">归档</a>
                    
                    <a  href="https://luckly.work/about/" title="关于我">关于我</a>
                    
                    <a  href="https://github.com/ITmxs/" title="github">github</a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>

    <div id="body">
        <div class="container">
            <div class="col-group">

                <div class="col-8" id="main">
                    
<div class="res-cons">
    <style type="text/css">
    .post-toc {
        position: fixed;
        width: 200px;
        margin-left: -210px;
        padding: 5px 10px;
        font-family: Athelas, STHeiti, Microsoft Yahei, serif;
        font-size: 12px;
        border: 1px solid rgba(0, 0, 0, .07);
        border-radius: 5px;
        background-color: rgba(255, 255, 255, 0.98);
        background-clip: padding-box;
        -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        box-shadow: 1px 1px 2px rgba(0, 0, 0, .125);
        word-wrap: break-word;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        z-index: 999;
        cursor: pointer;
        max-height: 70%;
        overflow-y: auto;
        overflow-x: hidden;
    }

    .post-toc .post-toc-title {
        width: 100%;
        margin: 0 auto;
        font-size: 20px;
        font-weight: 400;
        text-transform: uppercase;
        text-align: center;
    }

    .post-toc .post-toc-content {
        font-size: 15px;
    }

    .post-toc .post-toc-content>nav>ul {
        margin: 10px 0;
    }

    .post-toc .post-toc-content ul {
        padding-left: 20px;
        list-style: square;
        margin: 0.5em;
        line-height: 1.8em;
    }

    .post-toc .post-toc-content ul ul {
        padding-left: 15px;
        display: none;
    }

    @media print,
    screen and (max-width:1057px) {
        .post-toc {
            display: none;
        }
    }
</style>
<div class="post-toc" style="position: absolute; top: 188px;">
    <h2 class="post-toc-title">文章目录</h2>
    <div class="post-toc-content">
        <nav id="TableOfContents">
  <ul>
    <li>
      <ul>
        <li><a href="#一nginx-简介">一、Nginx 简介</a></li>
        <li><a href="#二nginx-安装">二、Nginx 安装</a></li>
      </ul>
    </li>
    <li><a href="#nginx-其他命令">Nginx 其他命令</a>
      <ul>
        <li></li>
        <li><a href="#四配置实例2-负载均衡">四、配置实例2 负载均衡</a></li>
        <li><a href="#五配置实例3-动静分离">五、配置实例3 动静分离</a></li>
        <li><a href="#六nginx配置高可用集群">六、Nginx配置高可用集群</a></li>
        <li><a href="#七nginx原理解析">七、Nginx原理解析</a></li>
      </ul>
    </li>
  </ul>
</nav>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {
        var postToc = $(".post-toc");
        if (postToc.length) {
            var leftPos = $("#main").offset().left;
            if(leftPos<220){
                postToc.css({"width":leftPos-10,"margin-left":(0-leftPos)})
            }

            var t = postToc.offset().top - 20,
                a = {
                    start: {
                        position: "absolute",
                        top: t
                    },
                    process: {
                        position: "fixed",
                        top: 20
                    },
                };
            $(window).scroll(function () {
                var e = $(window).scrollTop();
                e < t ? postToc.css(a.start) : postToc.css(a.process)
            })
        }
    })
</script>
    <article class="post">
        <header>
            <h1 class="post-title">《Nginx学习笔记》</h1>
        </header>
        <date class="post-meta meta-date">
            2021年3月17日
        </date>
        
        <div class="post-meta">
            <span>|</span>
            
            <span class="meta-category"><a href='/categories/Nginx'>Nginx</a></span>
            
        </div>
        
        
        <div class="post-meta">
            <span id="busuanzi_container_page_pv">|<span id="busuanzi_value_page_pv"></span><span>
                    阅读</span></span>
        </div>
        
        
        <div class="clear" style="display: none">
            <div class="toc-article">
                <div class="toc-title">文章目录</div>
            </div>
        </div>
        
        <div class="post-content">
            <blockquote>
<p>本文主要介绍nginx相关基础及简单使用</p>
</blockquote>
<p>[TOC]</p>
<p><strong>内容介绍</strong>
<strong>1、nginx基本概念。</strong></p>
<blockquote>
<p>(1) nginx是什么，能做什么事情</p>
<p>(2) 反向代理。</p>
<p>(3) 负载均衡。</p>
<p>(4) 动静分离</p>
</blockquote>
<p><strong>2、nginx 安装、常用命令和配置文件</strong></p>
<blockquote>
<p>(1)在liunx系统中安装nginx.</p>
<p>(2) nginx常用命令。</p>
<p>(3) nginx 配置文件。</p>
</blockquote>
<p><strong>3、nginx 配置实例 1-反向代理</strong></p>
<p><strong>4、nginx 配置实例 2-负载均衡</strong></p>
<p><strong>5、nginx 配置实例 3-动静分离。</strong></p>
<p><strong>6、nginx配置高可用集群</strong></p>
<p><strong>7、nginx 原理。</strong></p>
<hr>
<h3 id="一nginx-简介">一、Nginx 简介</h3>
<h4 id="1什么是nginx">1、什么是NGINX</h4>
<pre><code>	Nginx (&quot;engine x&quot;)是一个高性能的HTTP和反向代理服务器，特点是占有内存少，并发能
力强，事实上nginx的并发能力确实在同类型的网页服务器中表现较好
    Nginx专为性能优化而开发，性能是其最重要的考量，实现上非常注重效率，能经受高负载
的考验，有报告表明能支持高达50000个并发连接数。
</code></pre><p>
        <a data-fancybox="gallery" href="https://raw.githubusercontent.com/dunwu/images/dev/cs/web/nginx/nginx.jpg">
            <img class="mx-auto" alt="img" src="https://raw.githubusercontent.com/dunwu/images/dev/cs/web/nginx/nginx.jpg" />
        </a>
    </p>
<h4 id="2反向代理"><strong>2、反向代理</strong></h4>
<p><strong>a. 正向代理</strong>
在客户端(浏览器)配置代理服务器，通过代理服务器进行互联网访问</p>
<pre><code>{% asset_img image-20200606144302429.png  正向代理 %}
</code></pre><p><strong>b. 反向代理</strong>
反向代理，其实客户端对代理是无感知的，因为客户端不需要任何配置就可以访问，我们只
需要将请求发送到反向代理服务器，由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端，此时反向代理服务器和目标服务器对外就是一个服务器，暴露的是代理服务器
地址，隐藏了真实服务器IP地址。</p>
<p>反向代理（Reverse Proxy）方式是指以代理服务器来接受 internet 上的连接请求，然后将请求转发给内部网络上的服务器，并将从服务器上得到的结果返回给 internet 上请求连接的客户端，此时代理服务器对外就表现为一个反向代理服务器。</p>
<p>
        <a data-fancybox="gallery" href="https://raw.githubusercontent.com/dunwu/images/dev/cs/web/nginx/reverse-proxy.png">
            <img class="mx-auto" alt="img" src="https://raw.githubusercontent.com/dunwu/images/dev/cs/web/nginx/reverse-proxy.png" />
        </a>
    </p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606150932688.png">
            <img class="mx-auto" alt="反向代理" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606150932688.png" />
        </a>
    </p>
<h4 id="3负载均衡">3、负载均衡</h4>
<p>单个服务器解决不了，我们增加服务器的数量，然后将请求分发到各个服务器上,将原先
请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服
务器，也就是我们所说的负载均衡</p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606154956614.png">
            <img class="mx-auto" alt="负载均衡" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606154956614.png" />
        </a>
    </p>
<h4 id="4动静分离">4、动静分离</h4>
<p>为了加快网站的解析速度，可以把动态页面和静态页面由不同的服务器来解析，加快解析速
度。降低原来单个服务器的压力。</p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606155620164.png">
            <img class="mx-auto" alt="动静分离" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200606155620164.png" />
        </a>
    </p>
<h3 id="二nginx-安装">二、Nginx 安装</h3>
<p>下面的操作是以Centos7为例</p>
<p><strong>1. 使用远程连接工具连接Centos7操作系统</strong>
<strong>2. 安装nginx相关依赖</strong></p>
<pre><code>gcc
pcre
openssl
zlib
</code></pre><p>① 安装 nginx 需要先将官网下载的源码进行编译，编译依赖 gcc 环境，如果没有 gcc 环境，则需要安装：</p>
<pre><code>$ yum install gcc-c++
</code></pre><p>② PCRE(Perl Compatible Regular Expressions) 是一个Perl库，包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式，所以需要在 linux 上安装 pcre 库，pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令：</p>
<pre><code>$ yum install -y pcre pcre-devel
</code></pre><p>③ zlib 库提供了很多种压缩和解压缩的方式， nginx 使用 zlib 对 http 包的内容进行 gzip ，所以需要在 Centos 上安装 zlib 库。</p>
<pre><code>$ yum install -y zlib zlib-devel
</code></pre><p>④ OpenSSL 是一个强大的安全套接字层密码库，囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议，并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议，还支持 https(即在ssl协议上传输http)，所以需要在 Centos 安装 OpenSSL 库。</p>
<pre><code>$ yum install -y openssl openssl-devel
</code></pre><p><strong>3. 安装Nginx</strong></p>
<p>① 下载nginx，两种方式</p>
<blockquote>
<p>a. 直接下载<code>.tar.gz</code>安装包，地址：https://nginx.org/en/download.html</p>
</blockquote>
<pre><code> cd /usr/local/src/
</code></pre><blockquote>
<p>b. <strong>使用<code>wget</code>命令下载(推荐)</strong>。确保系统已经安装了wget，如果没有安装，执行 yum install wget 安装。</p>
</blockquote>
<pre><code>$ wget -c https://nginx.org/download/nginx-1.20.tar.gz
</code></pre><p>
        <a data-fancybox="gallery" href="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911115041034.png">
            <img class="mx-auto" alt="image-20210911115041034" src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911115041034.png" />
        </a>
    </p>
<p>② 依然是直接命令：</p>
<pre><code>$ tar -zxvf nginx-1.20.0.tar.gz
$ cd nginx-1.20.0
</code></pre><p>
        <a data-fancybox="gallery" href="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911115212076.png">
            <img class="mx-auto" alt="image-20210911115212076" src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911115212076.png" />
        </a>
    </p>
<p>③ 配置：</p>
<p>其实在 nginx-1.12.0 版本中你就不需要去配置相关东西，默认就可以了。当然，如果你要自己配置目录也是可以的。
1.使用默认配置</p>
<pre><code>$ ls

</code></pre><p>2.自定义配置(不推荐)</p>
<pre><code>$ ./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
</code></pre><blockquote>
<p>注：将临时文件目录指定为/var/temp/nginx，需要在/var下创建temp及nginx目录</p>
</blockquote>
<p>④ 编辑安装</p>
<pre><code>$ make &amp;&amp; make install
</code></pre><p>查看版本号(<code>使用nginx操作命令前提条件:必须进入nginx的目录/usr/local/nginx/sbin</code>.)</p>
<pre><code>$ ./nginx -v
</code></pre><p>查找安装路径：</p>
<pre><code>$ whereis nginx
</code></pre><p>⑤ 启动，停止nginx</p>
<p>直接启动</p>
<pre><code> /usr/local/webserver/nginx/sbin/nginx

</code></pre><h2 id="nginx-其他命令">Nginx 其他命令</h2>
<p>以下包含了 Nginx 常用的几个命令：</p>
<pre><code>/usr/local/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/nginx/sbin/nginx -s stop              # 停止 Nginx
</code></pre><pre><code>$ cd /usr/local/nginx/sbin/
$ ./nginx 
$ ./nginx -s stop
$ ./nginx -s quit
$ ./nginx -s reload
</code></pre><pre><code>nginx -s stop       快速关闭Nginx，可能不保存相关信息，并迅速终止web服务。
nginx -s quit       平稳关闭Nginx，保存相关信息，有安排的结束web服务。
nginx -s reload     因改变了Nginx相关配置，需要重新加载配置而重载。
nginx -s reopen     重新打开日志文件。
nginx -c filename   为 Nginx 指定一个配置文件，来代替缺省的。
nginx -t            不运行，仅仅测试配置文件。nginx 将检查配置文件的语法的正确性，并尝试打开配置文件中所引用到的文件。
nginx -v            显示 nginx 的版本。
nginx -V            显示 nginx 的版本，编译器版本和配置参数。
</code></pre><p>如果不想每次都敲命令，可以在 nginx 安装目录下新添一个启动批处理文件<strong>startup.bat</strong>，双击即可运行。内容如下：</p>
<pre><code>@echo off
rem 如果启动前已经启动nginx并记录下pid文件，会kill指定进程
nginx.exe -s stop

rem 测试配置文件语法正确性
nginx.exe -t -c conf/nginx.conf

rem 显示版本信息
nginx.exe -v

rem 按照指定配置去启动nginx
nginx.exe -c conf/nginx.conf
</code></pre><p>如果是运行在 Linux 下，写一个 shell 脚本，大同小异。</p>
<p><code>nginx.conf</code> 配置文件如下：</p>
<blockquote>
<p>*<strong>注：<code>conf/nginx.conf</code> 是 nginx 的默认配置文件。你也可以使用 nginx -c 指定你的配置文件*</strong></p>
</blockquote>
<pre><code>#运行用户
#user somebody;

#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志
error_log  D:/Tools/nginx-1.10.1/logs/error.log;
error_log  D:/Tools/nginx-1.10.1/logs/notice.log  notice;
error_log  D:/Tools/nginx-1.10.1/logs/info.log  info;

#PID文件，记录当前启动的nginx的进程ID
pid        D:/Tools/nginx-1.10.1/logs/nginx.pid;

#工作模式及连接数上限
events {
    worker_connections 1024;    #单个后台worker process进程的最大并发链接数
}

#设定http服务器，利用它的反向代理功能提供负载均衡支持
http {
    #设定mime类型(邮件支持类型),类型由mime.types文件定义
    include       D:/Tools/nginx-1.10.1/conf/mime.types;
    default_type  application/octet-stream;

    #设定日志
	log_format  main  '[$remote_addr] - [$remote_user] [$time_local] &quot;$request&quot; '
                      '$status $body_bytes_sent &quot;$http_referer&quot; '
                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

    access_log    D:/Tools/nginx-1.10.1/logs/access.log main;
    rewrite_log     on;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数（zero copy 方式）来输出文件，对于普通应用，
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用，可设置为 off，以平衡磁盘与网络I/O处理速度，降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;

    #连接超时时间
    keepalive_timeout  120;
    tcp_nodelay        on;

	#gzip压缩开关
	#gzip  on;

    #设定实际的服务器列表
    upstream zp_server1{
        server 127.0.0.1:8089;
    }

    #HTTP服务器
    server {
        #监听80端口，80端口是知名端口号，用于HTTP协议
        listen       80;

        #定义使用www.xx.com访问
        server_name  www.helloworld.com;

		#首页
		index index.html

		#指向webapp的目录
		root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp;

		#编码格式
		charset utf-8;

		#代理配置参数
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarder-For $remote_addr;

        #反向代理的路径（和upstream绑定），location 后面设置映射的路径
        location / {
            proxy_pass http://zp_server1;
        }

        #静态文件，nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
            #过期30天，静态文件不怎么更新，过期可以设大一点，如果频繁更新，则可以设置得小一点。
            expires 30d;
        }

        #设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status           on;
            access_log            on;
            auth_basic            &quot;NginxStatus&quot;;
            auth_basic_user_file  conf/htpasswd;
        }

        #禁止访问 .htxxx 文件
        location ~ /\.ht {
            deny all;
        }

		#错误处理页面（可选择性配置）
		#error_page   404              /404.html;
		#error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}
    }
}
</code></pre><p>好了，让我们来试试吧：</p>
<ol>
<li>启动 webapp，注意启动绑定的端口要和 nginx 中的 <code>upstream</code> 设置的端口保持一致。</li>
<li>更改 host：在 C:\Windows\System32\drivers\etc 目录下的 host 文件中添加一条 DNS 记录</li>
</ol>
<p>查询nginx进程：</p>
<pre><code>$ ps aux|grep nginx
</code></pre><p>启动成功后，在浏览器可以看到这样的页面：</p>
<p>
        <a data-fancybox="gallery" href="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911120628054.png">
            <img class="mx-auto" alt="image-20210911120628054" src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210911120628054.png" />
        </a>
    </p>
<p>
        <a data-fancybox="gallery" href="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210829090820571.png">
            <img class="mx-auto" alt="image-20210829090820571" src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210829090820571.png" />
        </a>
    </p>
<p><strong>实现工作</strong></p>
<p>修改nginx配置文件, <code>cd./</code></p>
<p><code>nginx.conf</code></p>
<p>
        <a data-fancybox="gallery" href="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210829090845318.png">
            <img class="mx-auto" alt="image-20210829090845318" src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/image-20210829090845318.png" />
        </a>
    </p>
<h4 id="例2-反向代理">例2 反向代理</h4>
<p><strong>1、实现效果</strong></p>
<blockquote>
<p>使用nginx反向代理，根据访问的路径跳转到不同端口的服务中。
nginx.监听端口为9001，。
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8081
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8082</p>
</blockquote>
<p><strong>2、准备工作</strong></p>
<blockquote>
<p>(1) 准备两个tomcat服务器，一个8080端口，一个8081端口</p>
<p>(2) 创建文件夹和测试页面。</p>
</blockquote>
<p><strong>3、具体nginx配置</strong></p>
<pre><code>$ vi /usr/local/nginx/conf/nginx.conf
</code></pre><p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607121227387.png">
            <img class="mx-auto" alt="nginx配置" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607121227387.png" />
        </a>
    </p>
<blockquote>
<p>(1) 找到nginx配置文件，进行反向代理配置。</p>
<p>(2) 开放对外访问的端口号9001</p>
<p>(3) 重启nginx服务器，使配置文件生效</p>
</blockquote>
<p><strong>4、最终测试</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607121539858.png">
            <img class="mx-auto" alt="edu请求示例" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607121539858.png" />
        </a>
    </p>
<p><strong>5、补充<code>location</code>部分</strong></p>
<p>location指令说明。
该指令用于匹配URL。。
语法如下:</p>
<pre><code>location [ = | ~ | ~* | ^~] uri {

}
1、=: 用于不含正则表达式的uri前，要求请求字符串与uri严格匹配，如果匹配成功，
	就停止继续向下搜索并立即处理该请求
2、~: 用于表示uri包含正则表达式，并且区分大小写
3、~*: 用于表示uri包含正则表达式，并且不区分大小写
4、^~: 用于不含正则表达式的uri前，要求Nginx服务器找到标识uri和请求字
	符串匹配度最高的location后，立即使用此location处理请求，而不再使用location
	块中的正则uri和请求字符串做匹配
注意: 如果uri包含正则表达式，则必须要有~或者~*标识。
</code></pre><h3 id="四配置实例2-负载均衡">四、配置实例2 负载均衡</h3>
<p><strong>1、实现效果</strong></p>
<blockquote>
<p>(1) 浏览器地址栏输入地址http://192.168.xxx.xxx/edu/index.html, 负载均衡效果，平均到8080
和8081端口中，</p>
</blockquote>
<p><strong>2、准备工作</strong></p>
<blockquote>
<p>(1) 准备两台tomcat服务器，一 台8080， 一台8081</p>
<p>(2) 在两台tomcat里面webapps目录中，创建名称是edu文件夹，在edu文件夹中创建
页面index.html,用于测试。</p>
</blockquote>
<p><strong>3、在nginx的配置文件中进行负载均衡的配置</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124508114.png">
            <img class="mx-auto" alt="负载均衡配置" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124508114.png" />
        </a>
    </p>
<p><strong>4、效果</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124828732.png">
            <img class="mx-auto" alt="负载均衡" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124828732.png" />
        </a>
     
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124843736.png">
            <img class="mx-auto" alt="负载均衡" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607124843736.png" />
        </a>
    </p>
<h4 id="负载分配策略">负载分配策略</h4>
<p>在linux下有Nginx、LVS、 Haproxy 等等服务可以提供负载均衡服务，而且Nginx提供了几种分配方式(策略):。</p>
<ul>
<li>
<p><strong>1、轮询(默认)</strong></p>
<p>每个请求按时间顺序逐一分配到不 同的后端服务器，如果后端服务器down掉，能自动剔除</p>
</li>
<li>
<p><strong>2、weight</strong>
weight代表权重默认为1,权重越高被分配的客户端越多。
指定轮询几率，weight和访问比率成正比，用于后端服务器性能不均的情况。例如: 。</p>
</li>
<li>
<p><strong>3、ip hash</strong></p>
<p>每个请求按访问ip的hash结果分配, 这样每个访客固定访问一个后端服务器,可以解诀session的问题。例如:</p>
<pre><code>upstream server pool{
  ip_ hash
  server 192.168.5.21:80
  server 192.168.5.22:80
}
</code></pre></li>
<li>
<p><strong>4、fair (第三方)</strong>
按后端服务器的响应时间来分配请求，响应时间短的优先分配</p>
<pre><code>upstream server_pool 
  server 192.168.5.21:80;
  server 192.168.5.22:80;
  fair;
}
</code></pre></li>
</ul>
<h3 id="五配置实例3-动静分离">五、配置实例3 动静分离</h3>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607153752466.png">
            <img class="mx-auto" alt="动静分离" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607153752466.png" />
        </a>
    </p>
<pre><code>通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置，可以使浏
览器缓存过期时间，减少与服务器之前的请求和流量。具体Expires定义: 是给一个资源
设定一个过期时间，也就是说无需去服务端验证，直接通过浏览器自身确认是否过期即可，
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件，
不建议使用Expires来缓存)，如果设置3d, 表示在这3天之内访问这个URL, 发送一
个请求，比对服务器该文件最后更新时间没有变化，则不会从服务器抓取，返回状态码304,
如果有修改，则直接从服务器重新下载，返回状态码200。。
</code></pre><p><strong>2、准备工作</strong></p>
<blockquote>
<p>(1) 在liunx系统中准备静态资源，用于进行访问</p>
<p>/data/image 图片文件夹</p>
<p>/data/www html文件夹</p>
</blockquote>
<p><strong>3、具体配置</strong></p>
<blockquote>
<p>(1) 在nginx配置文件中进行配置</p>
</blockquote>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607200057983.png">
            <img class="mx-auto" alt="动静分离" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607200057983.png" />
        </a>
    </p>
<p>4、实际测试</p>
<pre><code>http://192.168.1.112/www/index.html
http://192.168.1.112/image/1.jpg
</code></pre><p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607200424689.png">
            <img class="mx-auto" alt="img" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607200424689.png" />
        </a>
    </p>
<p>上图是因为<code>autoindex on</code>这个设置生效的</p>
<h3 id="六nginx配置高可用集群">六、Nginx配置高可用集群</h3>
<p><strong>1、什么是nginx高可用</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607205253505.png">
            <img class="mx-auto" alt="img" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607205253505.png" />
        </a>
    </p>
<blockquote>
<p>(1) 需要两台nginx服务器。
(2) 需要keepalived
(3) 需要虚拟ip</p>
</blockquote>
<p><strong>2、配置高可用的准备工作</strong></p>
<blockquote>
<p>(1) 需要两台服务器192.168.17.129 和192.168.17.1314
(2) 在两台服务器安装nginx.
(3) 在两合服务器安装keepalived.</p>
</blockquote>
<p><strong>3、在两台服务器安装keepalived</strong>
使用yum命令进行安装</p>
<pre><code>$ yum install keepalived
$ rpm -q -a keepalived    #查看是否已经安装上
</code></pre><p>默认安装路径: /etc/keepalived</p>
<p>安装之后，在etc里面生成目录keepalived, 有配置文件keepalived.conf</p>
<p><strong>4、完成高可用配置(主从配置)</strong></p>
<p>(1)修改keepalived的配置文件<code>keepalived.conf</code>为：</p>
<pre><code>global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_ server 192.168.17.129
	smtp_connect_timeout 30
	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看；通过它访问到主机
}

vrrp_script chk_http_ port {
	script &quot;/usr/local/src/nginx_check.sh&quot;
	interval 2   # (检测脚本执行的间隔)2s
	weight 2  #权重，如果这个脚本检测为真，服务器权重+2
}

vrrp_instance VI_1 {
	state BACKUP   # 备份服务器上将MASTER 改为BACKUP
	interface ens33 //网卡名称
	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
	priority 100   #主、备机取不同的优先级，主机值较大，备份机值较小
	advert_int 1	#每隔1s发送一次心跳
	authentication {	# 校验方式， 类型是密码，密码1111
        auth type PASS
        auth pass 1111
    }
	virtual_ipaddress { # 虛拟ip
		192.168.17.50 // VRRP H虛拟ip地址
	}
}
</code></pre><p>(2)在路径/usr/local/src/ 下新建检测脚本 nginx_check.sh</p>
<p>nginx_check.sh</p>
<pre><code>#! /bin/bash
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then
	/usr/local/nginx/sbin/nginx
	sleep 2
	if [`ps -C nginx --no-header| wc -1` -eq 0 ];then
		killall keepalived
	fi
fi
</code></pre><p>(3) 把两台服务器上nginx和keepalived启动</p>
<pre><code>$ systemctl start keepalived.service		#keepalived启动
$ ps -ef I grep keepalived		#查看keepalived是否启动
</code></pre><p><strong>5、最终测试</strong></p>
<p>(1) 在浏览器地址栏输入虚拟ip地址192.168.17.50</p>
<p>(2) 把主服务器(192.168.17.129) nginx和keealived停止，再输入192.168.17.50.</p>
<pre><code>$ systemctl stop keepalived.service  #keepalived停止
</code></pre><h3 id="七nginx原理解析">七、Nginx原理解析</h3>
<p><strong>1、master和worker</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607222133869.png">
            <img class="mx-auto" alt="img" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607222133869.png" />
        </a>
    </p>
<p><strong>2、worker如何进行工作的</strong></p>
<p>
        <a data-fancybox="gallery" href="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607222501486.png">
            <img class="mx-auto" alt="img" src="https://nishigouzi.github.io/2020/06/07/Nginx%e7%ac%94%e8%ae%b0/image-20200607222501486.png" />
        </a>
    </p>
<p><strong>3、一个master和多个woker的好处</strong>
(1) 可以使用nginx -s reload热部署。</p>
<pre><code>首先，对于每个worker进程来说，独立的进程，不需要加锁，所以省掉了锁带来的开销，
同时在编程以及问题查找时，也会方便很多。其次,采用独立的进程，可以让互相之间不会
影响，一个进程退出后，其它进程还在工作，服务不会中断，master进程则很快启动新的
worker进程。当然，worker进程的异常退出，肯定是程序有bug了，异常退出，会导致当
前worker.上的所有请求失败，不过不会影响到所有请求，所以降低了风险。
</code></pre><p><strong>4、设置多少个woker合适</strong></p>
<pre><code>Nginx同redis类似都采用了io多路复用机制，每个worker都是一个独立的进程， 但每个进
程里只有一个主线程，通过异步非阻塞的方式来处理请求，即使是 千上万个请求也不在话
下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu
数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
# 设置worker数量
worker.processes 4 

# work绑定cpu(4work绑定4cpu)
worker_cpu_affinity 0001 0010 0100 1000

# work绑定cpu (4work绑定8cpu中的4个)
worker_cpu_affinity 0000001 00000010 00000100 00001000
</code></pre><p>**5、连接数worker_ connection**</p>
<pre><code>这个值是表示每个worker进程所能建立连接的最大值，所以，一个nginx 能建立的最大连接数，应该是worker.connections * worker processes。当然，这里说的是最大连接数，对于HTTP 请求本地资源来说，能够支持的最大并发数量是worker.connections * worker processes,如果是支持http1.1的浏览器每次访问要占两个连接，所以普通的静态访问最大并发数是: worker.connections * worker.processes / 2, 而如果是HTTP作为反向代理来说，最大并发数量应该是worker.connections * worker_proceses/4. 因为作为反向代理服务器，每个并发会建立与客户端的连接和与后端服务的连接，会占用两个连接.
</code></pre><blockquote>
<p>第一个: 发送请求，占用了woker的几个连接数?
答案: 2或者4个。</p>
<p>第二个: nginx有一个master,有四个woker,每个woker支持最大的连接数1024,支持的最大并发数是多少?
答案：普通的静态访问最大并发数是: worker connections * worker processes /2，
而如果是HTTP作为反向代理来说，最大并发数量应该是worker connections * worker processes/4</p>
</blockquote>
        </div>

        
<div class="post-archive">
    <ul class="post-copyright">
        <li><strong>原文作者：</strong><a rel="author" href="https://luckly.work/">luckly</a></li>
        <li style="word-break:break-all"><strong>原文链接：</strong><a href="https://luckly.work/post/nginx/Nginx%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">https://luckly.work/post/nginx/Nginx%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</a></li>
        <li><strong>版权声明：</strong>本作品采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议</a>进行许可，非商业转载请注明出处（作者，原文链接），商业转载请联系作者获得授权。</li>
    </ul>
</div>
<br/>



        

<div class="post-archive">
    <h2>See Also</h2>
    <ul class="listing">
        
        <li><a href="/post/Flutter/Flutter%E5%95%86%E5%9F%8E%E9%A1%B9%E7%9B%AE/">《Flutter商城项目01》</a></li>
        
        <li><a href="/post/Flutter/%E5%9C%A8Flutter%E4%B8%AD%E7%9A%84%E5%A4%9A%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/">《在Flutter中的多版本控制》</a></li>
        
        <li><a href="/post/read/%E5%A6%82%E4%BD%95%E5%88%B6%E5%AE%9A%E8%AE%A1%E5%88%92/">《如何制定计划》</a></li>
        
        <li><a href="/post/%E4%B9%A6%E6%91%98-%E6%9E%97%E8%AF%AD%E5%A0%82/">书摘 林语堂</a></li>
        
        <li><a href="/post/go/Go%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97/">《Go安全指南》</a></li>
        
    </ul>
</div>


        <div class="post-meta meta-tags">
            
            <ul class="clearfix">
                
                <li><a href='/tags/Nginx'>Nginx</a></li>
                
            </ul>
            
        </div>
    </article>
    
    

    
    
    <div class="post bg-white">
      <script src="https://utteranc.es/client.js"
            repo= "https://github.com/ITmxs/repo"
            issue-term="pathname"
            theme="github-light"
            crossorigin="anonymous"
            async>
      </script>
    </div>
    
</div>

                    <footer id="footer">
    <div>
        &copy; 2021 <a href="https://luckly.work/">早起的年轻人 By luckly</a>
        
        | <a rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">粤ICP备2021号-1</a>
        
    </div>
    <br />
    <div>
        <div class="github-badge">
            <a href="https://juejin.cn/user/3843548384077192" target="_black" rel="nofollow"><span class="badge-subject">Powered by</span><span class="badge-value bg-blue">掘金</span></a>
        </div>
        <div class="github-badge">
            <a href="https://space.bilibili.com/480883651" target="_black"><span class="badge-subject">Design by</span><span class="badge-value bg-brightgreen">早起的年轻人</span></a>
        </div>
        <div class="github-badge">
            <a href="https://cloud.tencent.com/developer/user/6702670" target="_black"><span class="badge-subject">Theme</span><span class="badge-value bg-yellowgreen">云社区</span></a>
        </div>
    </div>
</footer>


    
    <script type="text/javascript">
        window.MathJax = {
            tex2jax: {
                inlineMath: [['$', '$']],
                processEscapes: true
                }
            };
    </script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script><script src="https://cdn.bootcdn.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src='/js/totop.js?v=0.0.0' async=""></script>



    <script type="text/javascript" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script>




    <script src='/js/douban.js'></script>
    <script src="/js/copy-to-clipboard.js"></script>

                </div>

                <div id="secondary">
    <section class="widget">
        <form id="search" action='https://luckly.work/search/' method="get" accept-charset="utf-8" target="_blank" _lpchecked="1">
      
      <input type="text" name="q" maxlength="20" placeholder="Search">
      <input type="hidden" name="sitesearch" value="https://luckly.work/">
      <button type="submit" class="submit icon-search"></button>
</form>
    </section>
    
    <section class="widget">
        <h3 class="widget-title">最近文章</h3>
<ul class="widget-list">
    
    <li>
        <a href="https://luckly.work/post/nginx/nginx%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9/" title="Nginx文件内容">Nginx文件内容</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/nginx/nginx%E6%9E%81%E7%AE%80%E6%95%99%E7%A8%8B/" title="Nginx极简教程">Nginx极简教程</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/nginx/%E5%8D%81%E5%88%86%E9%92%9F%E5%85%A5%E9%97%A8nginx/" title="十分钟入门Nginx">十分钟入门Nginx</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/go/Goland%E8%BF%9C%E7%A8%8B%E5%BC%80%E5%8F%91%E9%85%8D%E7%BD%AE/" title="Goland远程开发配置">Goland远程开发配置</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/%E8%AF%BB%E4%B9%A6/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" title="域名解析">域名解析</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/git/%E6%8F%90%E4%BA%A4%E8%BF%87%E7%A8%8B%E7%9C%81%E7%95%A5%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6/" title="提交过程省略某些文件">提交过程省略某些文件</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter_DropdownButton%E7%A4%BA%E4%BE%8B/" title="Flutter_DropdownButton示例">Flutter_DropdownButton示例</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter_ExpansionPanelList%E5%92%8CExpansionPanelList.radio%E7%A4%BA%E4%BE%8B/" title="Flutter_ExpansionPanelList和ExpansionPanelList">Flutter_ExpansionPanelList和ExpansionPanelList</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/flutter_tips/Flutter%E5%BE%AE%E4%BF%A1%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E8%B7%B3%E5%9B%9EApp%E6%8C%87%E5%AE%9A%E9%A1%B5%E9%9D%A2/" title="Flutter微信分享链接跳回App指定页面">Flutter微信分享链接跳回App指定页面</a>
    </li>
    
    <li>
        <a href="https://luckly.work/post/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F/%E5%A4%96%E5%8C%85%E5%8F%AF%E8%83%BD%E7%9A%84%E9%97%AE%E9%A2%98/" title="外包可能的问题">外包可能的问题</a>
    </li>
    
</ul>
    </section>

    

    <section class="widget">
        <h3 class="widget-title"><a href='/categories/'>分类</a></h3>
<ul class="widget-list">
    
    <li><a href="https://luckly.work/categories/Flutter/">Flutter (326)</a></li>
    
    <li><a href="https://luckly.work/categories/IT/">IT (2)</a></li>
    
    <li><a href="https://luckly.work/categories/Kotlin/">Kotlin (2)</a></li>
    
    <li><a href="https://luckly.work/categories/Mysql/">Mysql (1)</a></li>
    
    <li><a href="https://luckly.work/categories/nginx/">nginx (1)</a></li>
    
    <li><a href="https://luckly.work/categories/Vue/">Vue (6)</a></li>
    
    <li><a href="https://luckly.work/categories/YouTube%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD/">YouTube视频下载 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/android/">android (6)</a></li>
    
    <li><a href="https://luckly.work/categories/dart/">dart (96)</a></li>
    
    <li><a href="https://luckly.work/categories/Flutter/">Flutter (28)</a></li>
    
    <li><a href="https://luckly.work/categories/gin/">gin (25)</a></li>
    
    <li><a href="https://luckly.work/categories/git/">git (4)</a></li>
    
    <li><a href="https://luckly.work/categories/Go/">Go (102)</a></li>
    
    <li><a href="https://luckly.work/categories/gorm/">gorm (4)</a></li>
    
    <li><a href="https://luckly.work/categories/grpc/">grpc (1)</a></li>
    
    <li><a href="https://luckly.work/categories/html/">html (3)</a></li>
    
    <li><a href="https://luckly.work/categories/ios/">ios (1)</a></li>
    
    <li><a href="https://luckly.work/categories/linux/">linux (1)</a></li>
    
    <li><a href="https://luckly.work/categories/nginx/">nginx (6)</a></li>
    
    <li><a href="https://luckly.work/categories/python/">python (35)</a></li>
    
    <li><a href="https://luckly.work/categories/read/">读书笔记 (6)</a></li>
    
    <li><a href="https://luckly.work/categories/redis/">redis (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B8%AA%E4%BA%BA%E8%B5%84%E6%96%99/">个人资料 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B9%A6%E5%8D%95/">书单 (8)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%B9%A6%E8%AF%84/">书评 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统管理师 (19)</a></li>
    
    <li><a href="https://luckly.work/categories/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统项目管理师 (25)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%8E%9F%E5%88%99/">原则 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%8E%9F%E7%94%9F%E9%80%9A%E8%AE%AF/">原生通讯 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%9F%BA%E7%A1%80/">基础 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%A4%8D%E5%88%A9%E6%95%88%E5%BA%94/">复利效应 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%B0%91%E6%9C%89%E4%BA%BA%E8%B5%B0%E7%9A%84%E8%B7%AF/">少有人走的路 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E5%BF%83%E8%AF%AD/">心语 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E6%8F%92%E4%BB%B6/">插件 (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E6%95%99%E5%AD%A6/">教学 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%8E%8B%E9%98%B3%E6%98%8E/">王阳明 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%94%B5%E5%AD%90%E4%B9%A6/">电子书 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%99%BB%E9%99%86%E8%A1%A8%E5%8D%95/">登陆表单 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%A8%BB%E7%9B%9B%E5%92%8C%E5%A4%AB/">稻盛和夫 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%A9%B7%E7%88%B8%E7%88%B8%E5%AF%8C%E7%88%B8%E7%88%B8/">穷爸爸富爸爸 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%B2%BE%E8%BF%9B/">精进 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E7%BC%96%E7%A8%8B/">编程 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%99%9A%E5%B9%BB/">虚幻 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B9%8B%E8%B7%AF/">财务自由之路 (2)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%91%E6%AD%A5/">跑步 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%AF%E7%94%B1%E4%BC%A0%E5%8F%82/">路由传参 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%B7%AF%E7%BA%BF/">路线 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E8%BD%AF%E4%BB%B6%E5%AE%9E%E6%96%BD/">软件实施 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%98%B3%E6%98%8E%E5%BF%83%E5%AD%A6/">阳明心学 (3)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%A1%B9%E7%9B%AE/">项目 (1)</a></li>
    
    <li><a href="https://luckly.work/categories/%E9%AD%85%E5%8A%9B/">魅力 (1)</a></li>
    
</ul>
    </section>

    <section class="widget">
        <h3 class="widget-title"><a href='/tags/'>标签</a></h3>
<div class="tagcloud">
    
    <a href="https://luckly.work/tags/flutter/">flutter</a>
    
    <a href="https://luckly.work/tags/IT/">IT</a>
    
    <a href="https://luckly.work/tags/Kotlin/">Kotlin</a>
    
    <a href="https://luckly.work/tags/Mysql/">Mysql</a>
    
    <a href="https://luckly.work/tags/nginx/">nginx</a>
    
    <a href="https://luckly.work/tags/Vue/">Vue</a>
    
    <a href="https://luckly.work/tags/YouTube%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD/">YouTube视频下载</a>
    
    <a href="https://luckly.work/tags/android/">android</a>
    
    <a href="https://luckly.work/tags/dart/">dart</a>
    
    <a href="https://luckly.work/tags/flutter/">flutter</a>
    
    <a href="https://luckly.work/tags/gin/">gin</a>
    
    <a href="https://luckly.work/tags/git/">git</a>
    
    <a href="https://luckly.work/tags/go/">go</a>
    
    <a href="https://luckly.work/tags/gorm/">gorm</a>
    
    <a href="https://luckly.work/tags/grpc/">grpc</a>
    
    <a href="https://luckly.work/tags/html/">html</a>
    
    <a href="https://luckly.work/tags/ios/">ios</a>
    
    <a href="https://luckly.work/tags/linux/">linux</a>
    
    <a href="https://luckly.work/tags/nginx/">nginx</a>
    
    <a href="https://luckly.work/tags/python/">python</a>
    
    <a href="https://luckly.work/tags/redis/">redis</a>
    
    <a href="https://luckly.work/tags/%E4%B8%AA%E4%BA%BA%E8%B5%84%E6%96%99/">个人资料</a>
    
    <a href="https://luckly.work/tags/%E4%B9%A6%E5%8D%95/">书单</a>
    
    <a href="https://luckly.work/tags/%E4%B9%A6%E8%AF%84/">书评</a>
    
    <a href="https://luckly.work/tags/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统管理师</a>
    
    <a href="https://luckly.work/tags/%E4%BF%A1%E6%81%AF%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%B8%88/">信息系统项目管理师</a>
    
    <a href="https://luckly.work/tags/%E5%85%A5%E9%97%A8/">入门</a>
    
    <a href="https://luckly.work/tags/%E5%8E%9F%E5%88%99/">原则</a>
    
    <a href="https://luckly.work/tags/%E5%8E%9F%E7%94%9F%E9%80%9A%E8%AE%AF/">原生通讯</a>
    
    <a href="https://luckly.work/tags/%E5%9F%BA%E7%A1%80/">基础</a>
    
    <a href="https://luckly.work/tags/%E5%A4%8D%E5%88%A9%E6%95%88%E5%BA%94/">复利效应</a>
    
    <a href="https://luckly.work/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/">安装教程</a>
    
    <a href="https://luckly.work/tags/%E5%B0%91%E6%9C%89%E4%BA%BA%E8%B5%B0%E7%9A%84%E8%B7%AF/">少有人走的路</a>
    
    <a href="https://luckly.work/tags/%E5%BF%83%E8%AF%AD/">心语</a>
    
    <a href="https://luckly.work/tags/%E6%8F%92%E4%BB%B6/">插件</a>
    
    <a href="https://luckly.work/tags/%E6%95%99%E5%AD%A6/">教学</a>
    
    <a href="https://luckly.work/tags/%E7%8E%8B%E9%98%B3%E6%98%8E/">王阳明</a>
    
    <a href="https://luckly.work/tags/%E7%94%B5%E5%AD%90%E4%B9%A6/">电子书</a>
    
    <a href="https://luckly.work/tags/%E7%99%BB%E9%99%86%E8%A1%A8%E5%8D%95/">登陆表单</a>
    
    <a href="https://luckly.work/tags/%E7%A8%BB%E7%9B%9B%E5%92%8C%E5%A4%AB/">稻盛和夫</a>
    
    <a href="https://luckly.work/tags/%E7%A9%B7%E7%88%B8%E7%88%B8%E5%AF%8C%E7%88%B8%E7%88%B8/">穷爸爸富爸爸</a>
    
    <a href="https://luckly.work/tags/%E7%B2%BE%E8%BF%9B/">精进</a>
    
    <a href="https://luckly.work/tags/%E7%BC%96%E7%A8%8B/">编程</a>
    
    <a href="https://luckly.work/tags/%E8%99%9A%E5%B9%BB/">虚幻</a>
    
    <a href="https://luckly.work/tags/%E8%AF%97/">诗</a>
    
    <a href="https://luckly.work/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/">读书笔记</a>
    
    <a href="https://luckly.work/tags/%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B9%8B%E8%B7%AF/">财务自由之路</a>
    
    <a href="https://luckly.work/tags/%E8%B7%91%E6%AD%A5/">跑步</a>
    
    <a href="https://luckly.work/tags/%E8%B7%AF%E7%94%B1%E4%BC%A0%E5%8F%82/">路由传参</a>
    
    <a href="https://luckly.work/tags/%E8%B7%AF%E7%BA%BF/">路线</a>
    
    <a href="https://luckly.work/tags/%E8%BD%AF%E4%BB%B6%E5%AE%9E%E6%96%BD/">软件实施</a>
    
    <a href="https://luckly.work/tags/%E9%80%9A%E8%AE%AF%E5%BD%95/">通讯录</a>
    
    <a href="https://luckly.work/tags/%E9%98%B3%E6%98%8E%E5%BF%83%E5%AD%A6/">阳明心学</a>
    
    <a href="https://luckly.work/tags/%E9%A1%B9%E7%9B%AE/">项目</a>
    
    <a href="https://luckly.work/tags/%E9%AD%85%E5%8A%9B/">魅力</a>
    
</div>
    </section>

    
<section class="widget">
    <h3 class="widget-title">友情链接</h3>
    <ul class="widget-list">
        
        <li>
            <a target="_blank" href="http://www.topgoer.com/" title="枯藤">枯藤</a>
        </li>
        
        <li>
            <a target="_blank" href="https://gorm.cn/zh_CN/docs/index.html" title="gorm">gorm</a>
        </li>
        
        <li>
            <a target="_blank" href="https://docs.python.org/zh-cn/3/tutorial/index.html" title="python">python</a>
        </li>
        
        <li>
            <a target="_blank" href="https://www.liwenzhou.com/" title="李文周">李文周的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="http://www.xbzweb.com/" title="小包子的博客">小包子的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="https://www.flysnow.org/" title="飞雪无情的博客">飞雪无情的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="https://sliverhorn.com/" title="sliverhorn的博客">sliverhorn的博客</a>
        </li>
        
        <li>
            <a target="_blank" href="http://yuedu.baidu.com/ebook/14a722970740be1e640e9a3e" title="Android Gradle权威指南">Android Gradle权威指南</a>
        </li>
        
        <li>
            <a target="_blank" href="https://gesdh.cn/" title="小格子">格子导航</a>
        </li>
        
        <li>
            <a target="_blank" href="https://itachi.xyz/" title="阿林">itachi&#39;s Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="https://darjun.github.io/" title="大俊">大俊Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="https://geektutu.com/post/quick-golang.html" title="极客兔兔">极客兔兔Blog</a>
        </li>
        
        <li>
            <a target="_blank" href="http://zxfcumtcs.github.io/" title="赵雪峰">雪峰Blog</a>
        </li>
        
    </ul>
</section>


    <section class="widget">
        <h3 class="widget-title">其它</h3>
        <ul class="widget-list">
            <li><a href="https://luckly.work/index.xml">文章 RSS</a></li>
        </ul>
    </section>
</div>
            </div>
        </div>
    </div>
</body>

</html>